package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

// 一个行过滤器 在读取标准输入流的输入，处理该输入，然后将得到一些的结果输出到标准输出的程序中是常见的一个功能。grep 和 sed 就是常见的行过滤器。
// 使用 Go 编写的行过滤器demo，比如将所有的输入文字转化为大写的版本
func main() {
	// 对 os.Stdin 使用一个带缓冲的 scanner，让我们可以直接使用方便的 Scan 方法来直接读取一行，每次调用该方法可以让 scanner 读取下一行。
	scanner := bufio.NewScanner(os.Stdin)

	for scanner.Scan() {
		// scanner.Text() 返回一行文本
		ucl := strings.ToUpper(scanner.Text())
		// 将大写的内容 输出到 标准输出
		fmt.Println(ucl)
	}

	// 检查 Scan 的错误。文件结束符是可以接受的，并且不会被 Scan 当作一个错误。
	if err := scanner.Err(); err != nil {
		// 输出到 标准错误
		_, err := fmt.Fprintln(os.Stderr, "error:", err)
		if err != nil {
			return
		}
		os.Exit(1)
	}
}

// 可以在命令行中执行如下脚本，利用管道符拿到前一个命令的标准输出作为我们go程序的标准输入
// cat /tmp/lines | go run main.go
